package com.lcm.fas.view;

import java.lang.reflect.Method;
import java.util.Vector;

import javax.swing.table.AbstractTableModel;


/**
 * 自定义表格数据模板：类似于安卓的适配器
 * @author lcm专用版
 * @param <T>
 *
 */
public class MyTableModel<T> extends AbstractTableModel{
	private static final long serialVersionUID = 1L;
	private Vector<T> data = new Vector<T>();//数据源
	    private String[] columnNames;//表格的标题栏文字（）即表头（列名）
	    private Class<T> cls;//实例对象
	    public MyTableModel(String[] columnNames,Class<T> cls) {
			super();
			this.columnNames = columnNames;
			this.cls = cls;
		}
	    /**
	     * 生成列的数量
	     */
		@Override
		public int getColumnCount() {
			return columnNames.length;
		}
	    /**
	     * 生成行的数量
	     */
		@Override
		public int getRowCount() {
			return data.size();
		}
		/**
		 * 获取列名
		 */
	    @Override
	    public String getColumnName(int column) {
	    	return columnNames[column];
	    }
	    /**
	     * 获取对应行对应列数据
	     */
		@Override
		public Object getValueAt(int row, int col) {
			T c = data.get(row);//一行一对象
			try {
				Method method = cls.getMethod("getValue", Integer.class);
				method.setAccessible(true);
				return method.invoke(c, col);
			} catch (Exception e) {
				System.out.printf("MyTableModel getValueAt()", e);
			}
			return null;
			
		}
		/**
		 * 设置表格是否可编辑:否
		 */
		@Override
		public boolean isCellEditable(int rowIndex, int columnIndex) {
			return false;
		}
		/**
		 * 每一列对象的类
		 */
		@Override
		public Class<?> getColumnClass(int columnIndex) {
			return getValueAt(0, columnIndex).getClass();
		}
	
		/**
		 * 更新数据的方法
		 * @param data
		 */
		public void updateData(Vector<T> data) {
			this.data = data;
			if(data.size()==0) {
				data = new Vector<T>();
			}else {
				//插入到表格中
				fireTableRowsInserted(0, data.size()-1);
			}
		}
}
